]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Enables navigation using arrow keys in notifications with buttons.
authorHellyna Ng <hellyna@hellyna.com>
Thu, 20 Jan 2011 05:16:47 +0000 (13:16 +0800)
committerDan Winship <danw@gnome.org>
Tue, 1 Feb 2011 20:12:00 +0000 (15:12 -0500)
Users can now use the keyboard and mouse to navigate with buttons
interchangeably, instead of entirely using only mouse.

https://bugzilla.gnome.org/show_bug.cgi?id=630937

data/theme/gnome-shell.css
js/ui/messageTray.js

index 73d2b5c9bf54197704aaca307af7c1a762e2d884..ba931add03d9b61749ade5525088ad2649ad3813 100644 (file)
@@ -921,6 +921,10 @@ StTooltip StLabel {
     border: 1px solid #a1a1a1;
 }
 
+.notification-button:focus {
+    background-color: #666666;
+}
+
 .notification-button:active {
     border: 1px solid #a1a1a1;
     background-color: #2b2b2b;
@@ -933,6 +937,10 @@ StTooltip StLabel {
 }
 
 .notification-icon-button:hover {
+    border: 2px rgba(161,161,161,0.7);
+}
+
+.notification-icon-button:focus {
     background: rgba(192,192,192,0.7);
 }
 
index baa11f0d44e216138d7466ad8a3c6c80b42f5966..1812983d961d4a720f1de96128b5625efbd261ed 100644 (file)
@@ -262,6 +262,7 @@ Notification.prototype = {
         this._titleFitsInBannerMode = true;
         this._spacing = 0;
 
+        this._buttonFocusManager = null;
         this._hasFocus = false;
         this._lockTrayOnFocusGrab = false;
         // We use this._prevFocusedWindow and this._prevKeyFocusActor to return the
@@ -504,7 +505,7 @@ Notification.prototype = {
             this._buttonBox = box;
         }
 
-        let button = new St.Button();
+        let button = new St.Button({ can_focus: true });
 
         if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
             button.add_style_class_name('notification-icon-button');
@@ -514,8 +515,15 @@ Notification.prototype = {
             button.label = label;
         }
 
+        if (!this._buttonFocusManager)
+            this._buttonFocusManager = St.FocusManager.get_for_stage(global.stage);
+        if (this._buttonBox.get_children().length > 0)
+            this._buttonFocusManager.remove_group(this._buttonBox);
+
         this._buttonBox.add(button);
+        this._buttonFocusManager.add_group(this._buttonBox);
         button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
+
         this._updated();
     },
 
@@ -665,6 +673,10 @@ Notification.prototype = {
         this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
 
         this._hasFocus = true;
+
+        if (this._buttonFocusManager)
+            this._buttonBox.get_children()[0].grab_key_focus();
+
         if (lockTray)
             Main.messageTray.lock();
     },